Classificazione Vinho Verde

Tabella dei Contenuti

  1. Introduzione
  2. Analisi esplorativa dei dati
  3. Definizione del problema
  4. Preprocessing
  5. AdaBoost
  6. Support Vector Classifier
  7. XGBoost
  8. Conclusioni

1. Introduzione

Il Vinho Verde è un vino Portoghese, originario della provincia storica di Minho. Può essere rosso, bianco o rosé e viene consumato poco dopo l'imbottigliamento, tipicamente entro un anno da tale data. Solitamente, si presenta come un vino leggermente effervescente: tale caratteristica era originariamente dovuta alla fermentazione malolattica, considerata un difetto dai produttori di vino. Tuttavia, la sua tipica effervescenza risultava piacevole per i consumatori e ciò portò all'abbandono della pratica naturale, sostituita da una carbonazione artificiale.

alt text

2. Analisi esplorativa dei dati

Il dataset comprende le seguenti caratteristiche:

Inoltre, l'insieme per l'addestramento comprende una label che indica la qualità del vino che può essere:

Il dataset di addestramento è composto da 3266 osservazioni, e nessuna di queste risulta avere caratteristiche mancanti.

Analogamente, il test set non presenta dati mancanti e le osservazioni risultano essere 1632.

La variabile predittiva è, chiaramente, la qualità del vino. Pertanto, è importante verificare se le classi "High" e "AvgOrLow" sono bilanciate:

Si evidenzia uno sbilanciamento tra le classi di circa 1:3.6.

3. Definizione del problema

Per il dataset analizzato si richiede un problema di classificazione binaria: riconoscere, in base alle caratteristiche che si hanno a disposizione, se un vino è di medio/bassa o alta qualità. Una prima fase consisterà nell'addestramento degli algoritmi da utilizzare con il training set, mentre in un secondo tempo si effettuerà una classificazione sul test set. Le decisioni prese sul test set sono riassumibili in una tabella nota come tabella di confusione, così composta:

Actual + Actual -
Predicted + TP FP
Predicted - FN TN

e, da tale tabella è possibile ricavarne diverse misure di accuratezza per la previsione effettuata. Due esempi classici sono:

La misura di precisione che si prenderà in esame è l'f1-score, che si definisce come

\begin{equation} F_1 = 2 \cdot \frac{\text{precision} \times \text{recall}}{\text{precision} + \text{recall}} \end{equation}

e si richiede un'attenzione particolare alla classificazione di vini di alta qualità: scartare vini di alta qualità è chiaramente uno spreco peggiore che mettere in vendita vini di medio/bassa qualità. Questa richiesta permette di introdurre l'f2-score, metrica che permette di considerare i falsi negativi più costosi dei falsi positivi:

\begin{equation} F_2 = 5 \cdot \frac{\text{precision} \times \text{recall}}{4 \cdot \text{precision} + \text{recall}} \end{equation}

4. Preprocessing

In una prima fase, è necessario preprocessare i dati in modo da rendere l'addestramento dei modelli più efficiente. A tal fine, una delle strategie fondamentali consiste nello scalare i dati standardizzandoli. Vi sono due strade possibili da seguire:

Si è scelto di seguire il secondo metodo. Inoltre, a causa dello sbilanciamento tra le classi, si è deciso di utilizzare lo SMOTE, una tecnica che consiste nel simulare punti della classe minoritaria per bilanciare il le osservazioni.

Una pratica fondamentale prima dell'inizio dell'analisi consiste nella visualizzazione delle principali caratteristiche del dataset, che possono influenzare la scelta del modello.

Chiaramente, i due dataset non hanno media nulla e deviazione standard unitaria in quanto la standardizzazione si è effettuata sull'intero dataset.

Non si evidenziano differenze sostanziali tra le distribuzioni nel training set e nel test set.

Nessuna coppia di caratteristiche produce uno scatterplot che mostra dati linearmente separabili

Una volta operata l'elaborazione preliminare dei dati è possibile suddividere l'insieme di addestramento in train e validation set, in modo da utilizzare i due insiemi ricavati per addestrare e validare i modelli evitando l'overfitting.

5. AdaBoost

Il primo metodo utilizzato è l'Adaptive Boosting, o Adaboost, uno tra i più popolari metodi di boosting per la classificazione. I risultati ottenuti con l'albero decisionale come weak learner sono stati migliori rispetto all'utilizzo della regressione lineare.

Gli iperparametri principali del metodo AdaBoost sono stati impostati con una repeated 10 fold cross-validation con 3 ripetizioni:

Il miglior learning rate è risultato essere 0.1, mentre il miglior numero di stumps utilizzati per ogni ripetizione dell'algoritmo è stato 500.

Successivamente, si è applicato l'algoritmo per la previsione del test set, calcolando anche la probabilità di tali previsioni. Questo ha portato alla possibilità di costruire una curva raffigurante il valore dell'f1-score e dell'f2-score al variare della threshold impostata, identificando le soglie che li massimizzassero. La scelta di mostrare anche la soglia che massimizzasse l'f2-score è dovuta alla proprietà fondamentale di tale metrica, che valuta più costosi i falsi negativi rispetto ai falsi positivi, proprietà che risulta utile nel caso in esame, dove una classificazione errata dei vini di alta qualità (falsi positivi) è da ritenersi più costosa.

Le due soglie si discostano di circa 0.003, ed è possibile calcolare l'f1-score in corrispondenza di entrambe.

Gli f1-score si discostano di 0.02 circa, pertanto sono piuttosto simili. Si può mostrare la matrice di confusione relativa al risultato che si otterrebbe in caso si scegliesse ugnuna delle due threshold:

Il risultato ottenuto nel primo caso è complessivamente migliore, ma è da tenersi in conto il fatto che molti dei vini classificati di alta qualità sono stati generati appositamente con il metodo SMOTE, pertanto risulta evidente come sia più semplice classificarli opportunamente. Data la differenza ridotta tra gli f1-score mostrati, però, si può provare ad utilizzare la soglia che massimizza l'f2-score come threshold, per ottenere un risultato migliore nella classificazione dei vini di alta qualità.

6. Support Vector Classifier

Il secondo metodo utilizzato consiste nell'utilizzo dei Support Vector Machines per la classificazione. L'algoritmo utilizzato introduce un'estensione del maximal margin classifier, iperpiano che nei problemi di classificazione binaria separa nel miglior modo possibile le due classi. Tale metodo si avvale di un kernel che può essere impostato in diversi modi, ma dopo una serie di tentativi si è optato per il polinomiale, che portava risultati più efficaci.

Anche in questo caso sono numerosi gli iperparametri che si possono impostare, ma si sono scelti, per semplicità computazionale, il grado del polinomio utilizzato come kernel ed il grado di regolarizzazione.

Anche in questo caso il procedimento utilizzato è analogo alla procedura effettuata per l'AdaBoost.

Nonostante le soglie si discostino sostanzialmente, circa 0.2 è la differenza tra le due, l'f1-score non mostra riduzioni consistenti, discostandosi da quello ottimizzato di circa 0.02.

Si mostrano le matrici di confusione:

Anche in questo caso la previsione dei vini di alta qualità mostra evidenti miglioramenti e, pertanto, si è deciso di perdere 0.02 di f1-score per migliorare la classificazione richiesta.

7. XGBoost

Il terzo metodo scelto è l'Extreme Gradient Boosting, o XGBoost, metodo di boosting per la classificazione. Tale metodo consiste in un'implementazione avanzata del Gradient Boosting che comprende, tra gli altri miglioramenti, delle regolarizzazioni che ne riducono overfitting e ne migliorano le prestazioni complessive.

L'XGBoost ha una moltitudine incredibile di iperparametri ma, dopo una serie di tentativi, si sono impostati 500 stimatori ed un learning rate pari a 0.1. Per la valutazione dell'efficacia del metodo si è operata una repeated 10 fold cross-validation con 3 ripetizioni.

Il procedimento adoperato per la scelta della soglia ottimale segue ancora una volta la stessa strategia operata per gli algoritmi precedenti.

Sebbene le soglie si presentino molto distanti tra loro, la differenza tra gli f1-score risulta pari a 0.03, evidenziando che l'algoritmo prende decisioni con probabilità mediamente più alte degli algoritmi precedenti.

Anche in questo caso si mostrano le matrici di confusione:

In questo caso la matrice di confusione mostra risultati buoni anche nel caso in cui la threshold scelta sia quella che massimizza l'f2-score. Pertanto, anche per il metodo dell'XGBoost si è optato per mantenere come threshold quest'ultima.

8. Conclusioni

Complessivamente i risultati migliori sono stati, sia in termini di f2-score sia in termini di f1-score, del metodo XGBoost. Chiaramente, ciò non implica che il modello predica meglio i vini di alta qualità, poiché potrebbe essere soggetto ad overfitting.